function[NEW_GRAPH,MAPVERT,MAPEDGE]=relabelgraph(ED);
%returns the new graphical structure ;
%and the mapping between old and new graphs;
      NODES=ED.V;;
      UNSHRUNK=setdiff(NODES,ED.VERTICESINCKT);%nodes not in ;
      SHRUNK=ED.VERTICESINCKT;    ;
     % first find the mapping of vertices;
      destcount=2;;
      for i=1:numel(NODES);
            if ismember(NODES(i),SHRUNK);
                MAPVERT(i,:)=[NODES(i),1];;
            else;
                MAPVERT(i,:)=[NODES(i),destcount];  ;
                destcount=destcount+1;;
            end  ;
      end;
;
NEW_GRAPH.V=unique( MAPVERT(:,2));;
     ;
;
      %%now obtaining relabelled graphs;
    destcount=1; NEW_GRAPH.BE=[];NEW_GRAPH.E=[];;
    for i=1:numel(ED.E(:,1));
        ARC=ED.E(i,:);;
        SP=ARC(1);EP=ARC(2);WT=ARC(3);%start end and weight;
        if ismember(SP,SHRUNK)==0 && ismember(EP,SHRUNK)==0 ;
            'No changes this just relabelling';
            ISP=MAPVERT(find(MAPVERT(:,1)==SP),2);;
            IEP=MAPVERT(find(MAPVERT(:,1)==EP),2);;
            NEW_GRAPH.E(destcount,:)=[ISP,IEP,WT];;
            ;
            if(ismember(i,ED.BE));
                NEW_GRAPH.BE=[NEW_GRAPH.BE,destcount];
            end;
            MAPEDGE(i,:)=[i,destcount];;
            destcount=destcount+1;;
            ;
        elseif (ismember(SP,SHRUNK)==1 && ismember(EP,SHRUNK)==0);
            ;
            'No changes this just relabelling';
            ISP=MAPVERT(find(MAPVERT(:,1)==SP),2);;
            IEP=MAPVERT(find(MAPVERT(:,1)==EP),2);;
            NEW_GRAPH.E(destcount,:)=[ISP,IEP,WT];;
            ;
            if(ismember(i,ED.BE));
                NEW_GRAPH.BE=[NEW_GRAPH.BE,destcount];
            end;
            MAPEDGE(i,:)=[i,destcount];;
            destcount=destcount+1;;
  ;
        elseif (ismember(SP,SHRUNK)==0 && ismember(EP,SHRUNK)==1) ;
            'Need changes in weight';;
            ISP=MAPVERT(find(MAPVERT(:,1)==SP),2);;
            IEP=MAPVERT(find(MAPVERT(:,1)==EP),2);;
            ;
            [MINWTINCKTWT,INCIDENTCKTWT]=finde0e1(ED,EP);;
            ;
            NEWWT=WT+MINWTINCKTWT-INCIDENTCKTWT;;
            NEW_GRAPH.E(destcount,:)=[ISP,IEP,NEWWT];;
            if(ismember(i,ED.BE));
                NEW_GRAPH.BE=[NEW_GRAPH.BE,destcount];
            end;
            MAPEDGE(i,:)=[i,destcount];;
            destcount=destcount+1;;
            ;
        else %ismember(SP,SHRUNK)==1 && ismember(EP,SHRUNK)==1;
            ;
;
            MAPEDGE(i,:)=[i,-1];;
            ;
            'Bucket Edges inside CKT Dropped, totally inside circuit' ;;
        end;
        ;
        ;
    end;
          ;
      % see where BV maps to;
      count=1; NEW_GRAPH.BV=[];;
      for i=1:numel(ED.BV);
           if ismember(ED.BV(i),SHRUNK)==0;
            IND=find(MAPVERT(:,1)==ED.BV(i));;
            NEW_GRAPH.BV(count)=MAPVERT(IND,2);;
            count=count+1;;
           end;
      end;
      if count>1;
         NEW_GRAPH.BV=unique(NEW_GRAPH.BV);;
      end;
      ;
;
;
     ;
function[min_wt_in_ckt,incident_wt_in_ckt]=finde0e1(ED,EP) ;
;
%first thing is to find edges which are in circuit ;
   INBE= ED.E(ED.BE,:); % in BE;
   count=1;;
   for i=1:numel(ED.BE);
       if sum(ismember(INBE(i,1:2),ED.VERTICESINCKT))==2;
        ISCKTEDGE(count,:)=INBE(i,:);;
        count=count+1;;
       end;
   end;
   % now find the minimum;
   min_wt_in_ckt=min(ISCKTEDGE(:,3));;
   ;
   %now find the one incident on EP;
   INDEXofINCIDENT=find(ISCKTEDGE(:,2)==EP);;
   ;
   incident_wt_in_ckt=ISCKTEDGE(INDEXofINCIDENT,3);;
   return;
;
    ;
;
;
;
      ;
